<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
 * Simple utility class to handle logins.
 */
class Login_Manager {
	
	var $logged_in_user = NULL;
	//var $user_group_id = array('1');
        
	function __construct($params = array())
	{
		//echo "login libs";exit;
		$this->CI =& get_instance(); 
		$this->session =& $this->CI->session;
                
                if (!isset($params['autologin']) || $params['autologin'] !== FALSE) {
                    $required_group = -1;
                    if (isset($params['required_group'])) {
                        $required_group = $params['required_group'];
                    }
                    $this->check_login($required_group);
                }
	}
        
        function check_login($required_group = -1) {
            // if not logged in, automatically redirect
            $user = $this->get_user();
            if ($user === FALSE) {
                $this->session->set_userdata('login_redirect', uri_string());
                redirect('admin/cpanel/login');
            }
            if ($required_group > 0) {
                if ($user[0]->ugid > $required_group) {
                    show_error('You do not have access to this section.');
                }
            }
        }
	// Đăng nhập vào hệ thống
	// Method: POST, PUT, GET etc
	// Data: '{"email":"vui.nguyen3@gmail.com","password":"ChjESPeX"}'; // json ==> index.php?param=value
	function login($email, $password){
		// define value
		$Email		= $email;
		$Password	= $password;
		$wsUserName	= wsUserName_GB;
		$wsPassword	= wsPassword_GB;
		$ip			= "";
		$Signature 	= md5($Email.$wsUserName.$wsPassword);
		$url		= base_url()."api/api/checkLoginEmail";
		$data		= array(
						'Email' 		=> $Email,
						'Password' 		=> $Password,
						'wsUserName' 	=> $wsUserName,
						'wsPassword'	=> $wsPassword,
						'Signature' 	=> $Signature,
						'Ip' 			=> $ip
						);
		$checkLoginResult = $this->_curl($url, $data);                
                switch($checkLoginResult)
                {
                    case '-888':
                        $result['code'] = $checkLoginResult;
                        $result['msg'] = 'Lỗi hệ thống.';
                        break;
                    case '-110':
                        $result['code'] = $checkLoginResult;
                        $result['msg'] = 'Tham số của hàm không hợp lệ.';
                        break;
                    case '-102':
                        $result['code'] = $checkLoginResult;
                        $result['msg'] = 'Chữ ký điện tử không hợp lệ.';
                        break;
                    case '-101':
                        $result['code'] = $checkLoginResult;
                        $result['msg'] = 'Ip bị cấm truy cập WebService.';
                        break;
                    case '-100':
                        $result['code'] = $checkLoginResult;
                        $result['msg'] = 'Tài khoản WebService không tồn tại.';
                        break;
                    case '-1':
                        $result['code'] = $checkLoginResult;
                        $result['msg'] = 'Tài khoản hoặc mật khẩu không đúng.';
                        break;
                    default :
                        $result['code'] = 1;
                        $result['msg'] = $checkLoginResult;
                }
		//print_r($result);exit;
		return $result;
	}
        
        function register($email, $password, $wsUserName='', $wsPassword='')
        {
            if($wsUserName == '') $wsUserName = wsUserName_GB;
            if($wsPassword == '') $wsPassword = wsPassword_GB;
            
            $Email		= $email;
            $Password	= md5($password);
            //$wsUserName	= wsUserName;
            //$wsPassword	= wsPassword;
            $ip			= "";
            $Signature 	= md5($Email.$wsUserName.$wsPassword);
            $url		= base_url()."api/api/register";
            $data		= array(
                                            'Email' 		=> $Email,
                                            'Password' 		=> $Password,
                                            'wsUserName' 	=> $wsUserName,
                                            'wsPassword'	=> $wsPassword,
                                            'Signature' 	=> $Signature,
                                            'Ip' 			=> $ip
                                            );
            $quickRegisterResult = $this->_curl($url, $data);

            switch ($quickRegisterResult)
            {
                case '-888':
                    $result['code'] = $quickRegisterResult;
                    $result['msg']  = 'Lỗi hệ thống.';break;
                case '-110':
                    $result['code'] = $quickRegisterResult;
                    $result['msg']  = 'Tham số của hàm không hợp lệ.';break;
                case '-102':
                    $result['code'] = $quickRegisterResult;
                    $result['msg']  = 'Chữ ký điện tử không hợp lệ.';break;
                case '-101':
                    $result['code'] = $quickRegisterResult;
                    $result['msg']  = 'Ip bị cấm truy cập WebService.';break;
                case '-100':
                    $result['code'] = $quickRegisterResult;
                    $result['msg']  = 'Tài khoản WebService không tồn tại.';break;
                case '-2':
                    $result['code'] = $quickRegisterResult;
                    $result['msg']  = 'Tài khoản không hợp lệ hoặc đã được đăng ký.';break;
                case '-3':
                    $result['code'] = $quickRegisterResult;
                    $result['msg']  = 'Email không hợp lệ hoặc đã được đăng ký.';break;
                case '-4':
                    $result['code'] = $quickRegisterResult;
                    $result['msg']  = 'Mật khẩu quá đơn giản.';break;
                case '-5':
                    $result['code'] = $quickRegisterResult;
                    $result['msg']  = 'Mật khẩu không được trùng với tài khoản.';break;
                default :
                    $result['code'] = 1;
                    $result['msg']=$quickRegisterResult;
            }
            //print_r($result);exit;
            return $result;
        }
        
        function _curl($url, $data)
        {
            /// 
            if(!isset($timeout))	$timeout=30;		
            $curl_handle = curl_init();
            curl_setopt($curl_handle, CURLOPT_URL, $url);
            curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($curl_handle, CURLOPT_POST, 1);
            curl_setopt($curl_handle, CURLOPT_POSTFIELDS,$data);
            $buffer = curl_exec($curl_handle);
            curl_close($curl_handle);		
            
            return $buffer;
        }
        
        function checkEmail($email)
        {
            $Email = $email;
            $wsUserName	= wsUserName_GB;
            $wsPassword	= wsPassword_GB;
            $ip			= "";
            $Signature 	= md5($Email.$wsUserName.$wsPassword);
            $url		= base_url()."api/api/checkEmail";
            $data		= array(
                                            'Email' 		=> $Email,
                                            'wsUserName' 	=> $wsUserName,
                                            'wsPassword'	=> $wsPassword,
                                            'Signature' 	=> $Signature,
                                            'Ip' 			=> $ip
                                            );
            $checkEmailResult = $this->_curl($url, $data);
            
            return $checkEmailResult;
        }
        
	// defined account error
	function account_show_error($error)
	{
		$msg	= null;
		switch ($error) {
			case 0101:		$msg = ANO_ACC_INVALID_EMAIL;break;
			case 0102:		$msg = EMAIL_EXISTED;break;
			case 0103:		$msg = INVALID_DATE;break;
			default:		$msg = ANO_ACC_UNDEFINED;
		}
		return $msg;
	}
	function save_session($obj)
	{
		if(isset($obj))
			$_SESSION['KPAY']['USER'] = $obj;
		return $_SESSION['KPAY']['USER'];				
	}
	function is_logined(){
		//print_r($_SESSION["KPAY"]["USER"]);
		if(!isset($_SESSION["KPAY"]["USER"]))
		{
			redirect('home');
		}	
	}
	
	/**
	 * process_login
	 * Validates that a username and password are correct.
	 * 
	 * @param object $userser The user containing the login information.
	 * @return FALSE if invalid, TRUE or a redirect string if valid. 
	 */
	function process_login($username, $password){
		// attempt the login
		$success = $this->login($username, $password);//print_r(array($username,$password));exit;
                //print_r($success);exit;
		if($success['code']==1){
                    $user = json_decode($success['msg']);
                    if($user[0]->ugid==1)
                    {
			// store the userid if the login was successful
			$this->session->set_userdata('logged_in_id', $user[0]->uID);
			// store the user for this request
			$this->logged_in_user = $user[0];
			// if a redirect is necessary, return it.
			//$redirect = $this->session->userdata('login_redirect');
			//if(!empty($redirect)){
				//$success = $redirect;
			//}
                        return TRUE;
                    }
		}
		return FALSE;
	}
	
	function logout(){
		// Finally, destroy the session.
		//session_destroy();
		$this->session->sess_destroy();		
		$this->logged_in_user = NULL;
	}
	
	function get_user(){
		if(is_null($this->logged_in_user)){
			$id = $this->session->userdata('logged_in_id');
			if(is_numeric($id)){
                            $user_model = new db_user_model();
                            $user = $user_model->getUserById($id);//print_r($user);exit;
                            if(count($user)!=0 && $user[0]->ugid==1){
                                    //$user->group->get(1);
                                    $this->logged_in_user = $user;
                                    return $this->logged_in_user;
                            }
			}
			return FALSE;
		}else{
			return $this->logged_in_user;
		}
	}
	// GET SESSION ID OF EPAY
	// Method: POST, PUT, GET etc
	// Data: Partner ID,username,password
	function kgp_get_session_id_epay()
	{
		$sessionid	= "";
		//Khai bao dia chi webservice
		$webservice = ANO_API_EPAY_URL;	
		$url_status = check_url($webservice);
		//print_r($url_status);exit;		
		if($url_status['errno'] == 0 &&  $url_status['http_code'] == 200 )
		{	
			try
			{
				$soapClient = new SoapClient(null, array('location' => $webservice, 'uri' => "http://127.0.0.1"));		
				//Ham login		
				$login = new login($soapClient);
				// Thông sô Epay cung cấp dùng để login lấy session 
				$login-> m_PartnerID 	= ANO_ACC_PARTNER_ID;
				$login-> m_UserName 	= ANO_ACC_USER;
				$login-> m_Pass 		= ANO_ACC_PASS;
				$login-> soapClient = $soapClient ;		
				
				$loginresponse = new loginResponse();
				
				$loginresponse =  $login-> login_();	
				if($loginresponse->m_SessionID)
					$sessionid	= $loginresponse->m_SessionID;
				else
					$sessionid	= "";// ko get được session id	
			}catch (ErrorException $e) {
				// ...
				$sessionid	= "";//"Hệ thống đang bận hoặc bảo trì. Vui lòng thử lại!";
			}
		}
		return $sessionid;
	}
	
}
